﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ComunesMGI.DataTypes;
using ClienteWinMGI.Logica;
using ComunesMGI.Controles;

namespace ClienteWinMGI.Presentacion
{
    public partial class AltaIncidente : Form
    {
        private List<DataSistema> _sistemasDeCliente;
        private List<DataCliente> _clientes;
        private TablaCamposControl _tablaCampos;

        public AltaIncidente()
        {
            InitializeComponent();
            cargarClientes();
            clearValidator();
            comboBoxSistemas.SelectedIndex = -1;
            comboBoxSistemas.Enabled = false;
        }

        private void cargarClientes()
        {
            List<DataCliente> _ldc;
            IClientes _il = LogicaFactory.getInstance().getIClientes();
            _ldc = _il.getClientes();
            foreach (DataCliente dc in _ldc)
            {
                comboBoxClientes.Items.Add(dc.Nombre);
            }
            _clientes = _ldc;

            comboBoxClientes.SelectedIndex = -1;

        }

        private void comboBoxClientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBoxSistemas.Items.Clear();
            string _nombreCliente = comboBoxClientes.SelectedItem.ToString();
            ISistemas _sist = LogicaFactory.getInstance().getISistemas();
            List<DataSistema> _lista = _sist.getSistemas(new DataCliente(_nombreCliente));
            for (int i = 0; i < _lista.Count(); i++)
            {
                DataSistema _dataSist = _lista[i];
                //string item = /*"Id:" + _dataSist.Id_lista + ";" + */" Nombre:" + _dataSist.Nombre + ";" + "Sitio:" + _dataSist.Sitio;
                string item = _dataSist.Nombre;
                comboBoxSistemas.Items.Add(item);
            }
            _sistemasDeCliente = _lista;
            comboBoxSistemas.SelectedIndex = -1;
            comboBoxSistemas.Enabled = true;
        }

        private void buttonImpact_Click(object sender, EventArgs e)
        {
            clearValidator();
            if (comboBoxClientes.SelectedIndex == -1)
                showValidator("El campo del cliente es requerido.");
            else
            {
                if (comboBoxSistemas.SelectedIndex == -1)
                    showValidator("El campo del sistema para el cliente es requerido.");
                else
                {
                    try
                    {
                        IIncidentes ii = LogicaFactory.getInstance().getIIncidentes();
                        DataSistema actualDs = _sistemasDeCliente.First(ds => ds.Nombre == comboBoxSistemas.SelectedItem.ToString());
                        actualDs.Campos = _tablaCampos.getCampos();

                        if (!string.IsNullOrEmpty(ii.addIncidente(actualDs).IdIncidente))
                        {
                            Notificacion notif = new Notificacion("Nuevo Incidente Creado", "Se ha creado correctamente el nuevo Incidente.", "El nuevo incente se creo para el sistema " + comboBoxSistemas.Text + " del cliente " + comboBoxClientes.Text);
                            notif.ShowDialog();
                        }
                        else
                        {
                            Error err = new Error("Error", "", "No se pudo agregar el incidente.");
                        }

                    }
                    catch (System.Exception ex)
                    {
                        Error err = new Error("Error", "", ex.Message);
                    }
                }
            }
        }

        private void buttonExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void clearValidator()
        {
            imageValidator.Visible = false;
            labelValidator.Visible = false;
        }

        private void showValidator(string textoValidator)
        {
            imageValidator.Visible = true;
            labelValidator.Visible = true;
            labelValidator.Text = textoValidator;
        }

        private void comboBoxSistemas_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<DataCliente> _ldc;
            IClientes _il = LogicaFactory.getInstance().getIClientes();
            _ldc = _il.getClientes();
            foreach (DataCliente dc in _ldc)
            {
                comboBoxClientes.Items.Add(dc.Nombre);
            }
            _clientes = _ldc;

            DataCliente actualDc = _clientes.First(dc => dc.Nombre == comboBoxClientes.SelectedItem.ToString());
            DataSistema actualDs = _sistemasDeCliente.First(ds => ds.Nombre == comboBoxSistemas.SelectedItem.ToString());
            IIncidentes il = LogicaFactory.getInstance().getIIncidentes();
            List<DataCampo> dataCampos = il.getCampos(actualDc, actualDs);
            _tablaCampos = new TablaCamposControl(dataCampos);
            groupBoxExtras.Controls.Add(_tablaCampos);
        }


    }
}
